{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习SVM自定义函数的应用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import svm, datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## 设置属性防止中文乱码\n",
    "mpl.rcParams['font.sans-serif'] = [u'SimHei']\n",
    "mpl.rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "## 加载鸢尾花数据\n",
    "iris = datasets.load_iris()\n",
    "## 获取前两列作为特征属性(可以比较一下后两列的效果)\n",
    "X = iris.data[:, :2]\n",
    "Y = iris.target\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "## 自定义一个核函数, 参数x，y是特征属性矩阵（会进行迭代，迭代后类型就会不同）\n",
    "def my_kernel(x, y):\n",
    "    \"\"\"\n",
    "    We create a custom kernel:\n",
    "\n",
    "                 (2  0)\n",
    "    k(x, y) = x  (    ) y.T\n",
    "                 (0  1)\n",
    "    \"\"\"\n",
    "    M = np.array([[2, 0], [0, 1]])\n",
    "    return np.dot(np.dot(x, M), y.T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集准确率:82.67%\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nmIUQQggH8v+QGsNeK8YGgQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2455ffb3e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 使用自定义的核函数创建一个SVM对象\n",
    "clf = svm.SVC(kernel=my_kernel)\n",
    "clf.fit(X, Y)\n",
    "\n",
    "## 评估效果\n",
    "score = clf.score(X,Y)\n",
    "print (\"训练集准确率:%.2f%%\" % (score * 100))\n",
    "\n",
    "## 构建预测网格\n",
    "h = .02 \n",
    "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n",
    "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
    "## 预测值\n",
    "Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "Z = Z.reshape(xx.shape)\n",
    "\n",
    "cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])\n",
    "cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])\n",
    "plt.figure(facecolor='w', figsize=(8,4))\n",
    "\n",
    "## 画出区域图\n",
    "plt.pcolormesh(xx, yy, Z, cmap=cm_light)\n",
    "\n",
    "## 画出点图\n",
    "plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=cm_dark)\n",
    "\n",
    "## 设置title及其他相关属性\n",
    "plt.title(u'SVM中自定义核函数')\n",
    "plt.xlim(x_min, x_max)\n",
    "plt.ylim(y_min, y_max)\n",
    "plt.text(x_max - .3, y_min + .3, (u'准确率%.2f%%' % (score * 100)).lstrip('0'),  size=15, horizontalalignment='right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
